package ar.edu.utn.frba.dds.tp.code.dateParser;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.joda.time.LocalDate;
import org.joda.time.format.DateTimeFormat;

public abstract class Formato {
	
	private SimpleDateFormat formatter;
	
	/**
	 * 
	 * Clase Abstracta, Padre de FormatoSimple y FormatoFlexible.
	 * En esta clase se encuentran definidos los mensajes que implementan las clases Hijas para parsear.
	 */
	
	public abstract Date parse (String stringAParsear);
	
	/**
	 * 
	 * @param fechaEnString (String)
	 * @param formato (String)
	 * @return LocalDate (Lib JodaTime)
	 * 
	 * Dado un String que representa una fecha, y un String que representa un formato de parseo, 
	 * devuelve un LocalDate (de Jodatime) donde est� la fecha correctamente cargado.
	 * 
	 * Si no puede realizar el parseo, lanza CantParseException.
	 */
	
	public Date parse(String stringAParsear,String formato) {
		try{
			// Parsea y devuelve una LocalDate. Si no puede parsear, lanza IllegalArgumentException.
			return LocalDate.parse(stringAParsear, DateTimeFormat.forPattern(formato)).toDate();
		}
		catch (IllegalArgumentException e){
			throw new CantParseException(stringAParsear + " no pudo ser parseado correctamente", e);
		}
		
		
	
	}

	public SimpleDateFormat getFormatter() {
		return formatter;
	}

	public void setFormatter(SimpleDateFormat formatter) {
		this.formatter = formatter;
	}

}


